:- import set_unify/2 from set_unify.
:- import numbervars/1 from num_vars.
:- import normalize_result/2 from can_mono.

test :- tp, fail.
test :- writeln('=========== Result is ================'), nl, show_facts.

unify_sets([],[]).
unify_sets([A|As],[B|Bs]) :-
       set_unify(A,B), unify_sets(As,Bs).


%---------------- Transformed program ----------------------

main__1(_428,_430) :-
        [_365] = _432, [_399] = _434,
        init([num],[num],[num],[_365],[_379]),
        randomize([_379],[_395],[num]),
        investigate([_395],[_399]),
        normalize_result([_432,_434],
                         [_428,_430]).
init__1(_392,_394,_396,_398,_400) :-
        [_342] = _402, [_350] = _404, [_354] = _406, [_358] = _408, [_362] = _410,
        init([_342],[_350],[_350],[_354],[_358],[_362]),
        normalize_result([_402,_404,_406,_408,_410],
                         [_392,_394,_396,_398,_400]).
init__1(_238,_240,_242,_244,_246,_248) :-
        [num] = _250, [_197] = _252, [_201] = _254, [_205] = _256, [_209] = _258, [_213] = _260,
        normalize_result([_250,_252,_254,_256,_258,_260],
                          [_238,_240,_242,_244,_246,_248]).
init__1(_999,_1001,_1003,_1005,_1007,_1009) :-
        [_898] = _1011, [_913] = _1013, [_937] = _1015, [_941] = _1017, [_945] = _1019, [list,_949] = _1021,
        fill([_913],[list],[_823]),
        get_pats([_941],[_945],[_839]),
        'my is'([_871],[[_937],[_913]]),
        fill([_871],[list,_823],[_881]),
        'my is'([_929],[[_898],[num]]),
        test([_913],[_933],[_937]),
        init([_929],[_933],[_937],[_941],[_945],[_949]),
        normalize_result([_1011,_1013,_1015,_1017,_1019,_1021],
                         [_999,_1001,_1003,_1005,_1007,_1009]).
test__1(_286,_288,_290) :-
        [_232] = _292, [_250] = _294, [_259] = _296,
        'my ='([_232],[num]),
        'my is'([_250],[_259]),
        normalize_result([_292,_294,_296],
                         [_286,_288,_290]).
test__1(_259,_261,_263) :-
        [_229] = _265, [_220] = _267, [_205] = _269,
        'my is'([_220],[[_229],[num]]),
        normalize_result([_265,_267,_269],
                         [_259,_261,_263]).
fill__1(_149,_151,_153) :-
        [num] = _155, [_133] = _157, [_133] = _159,
        normalize_result([_155,_157,_159],
                          [_149,_151,_153]).
fill__1(_362,_364,_366) :-
        [_313] = _368, [_332] = _370, [list,_336] = _372,
        'my is'([_328],[[_313],[num]]),
        fill([_328],[_332],[_336]),
        normalize_result([_368,_370,_372],
                         [_362,_364,_366]).
randomize__1(_145,_147,_149) :-
        [list] = _151, [list] = _153, [_129] = _155,
        normalize_result([_151,_153,_155],
                          [_145,_147,_149]).
randomize__1(_613,_615,_617) :-
        [_553] = _619, [list,_574] = _621, [_516] = _623,
        mylength([_553],[_500]),
        'my is'([_578],[[_516],[num]]),
        'my is'([_549],[_578]),
        split([_549],[_553],[_557],[_570]),
        randomize([_570],[_574],[_578]),
        normalize_result([_619,_621,_623],
                         [_613,_615,_617]).
split__1(_188,_190,_192,_194) :-
        [num] = _196, [list,_169] = _198, [_165] = _200, [_169] = _202,
        normalize_result([_196,_198,_200,_202],
                          [_188,_190,_192,_194]).
split__1(_426,_428,_430,_432) :-
        [_370] = _434, [list,_389] = _436, [_393] = _438, [list,_397] = _440,
        'my is'([_385],[[_370],[num]]),
        split([_385],[_389],[_393],[_397]),
        normalize_result([_434,_436,_438,_440],
                         [_426,_428,_430,_432]).
investigate__1(_122,_124) :-
        [list] = _126, [_109] = _128,
        normalize_result([_126,_128],
                          [_122,_124]).
investigate__1(_372,_374) :-
        [list,_342] = _376, [_346] = _378,
        property([_315],[atom],[_331]),
        p_investigate([_331],[_346]),
        investigate([_342],[_346]),
        normalize_result([_376,_378],
                         [_372,_374]).
get_pats__1(_284,_286,_288) :-
        [_248] = _290, [_260] = _292, [_256] = _294,
        get_pats([_248],[_260],[_256],[_260]),
        normalize_result([_290,_292,_294],
                         [_284,_286,_288]).
get_pats__1(_174,_176,_178,_180) :-
        [num] = _182, [_147] = _184, [list] = _186, [_155] = _188,
        normalize_result([_182,_184,_186,_188],
                          [_174,_176,_178,_180]).
get_pats__1(_426,_428,_430,_432) :-
        [_370] = _434, [list,_389] = _436, [list,_393] = _438, [_397] = _440,
        'my is'([_385],[[_370],[num]]),
        get_pats([_385],[_389],[_393],[_397]),
        normalize_result([_434,_436,_438,_440],
                         [_426,_428,_430,_432]).
get_pats__1(_307,_309,_311,_313) :-
        [_269] = _315, [list] = _317, [_277] = _319, [_281] = _321,
        get_pats([_269],[_281],[_277],[_281]),
        normalize_result([_315,_317,_319,_321],
                         [_307,_309,_311,_313]).
property__1(_360,_362,_364) :-
        [list,_84] = _366, [_314] = _368, [_334] = _370,
        my_functor([_330],[_314],[_318]),
        my_arg([num],[_330],[_334]),
        normalize_result([_366,_368,_370],
                         [_360,_362,_364]).
property__1(_269,_271,_273) :-
        [list,_238] = _275, [_242] = _277, [_246] = _279,
        property([_238],[_242],[_246]),
        normalize_result([_275,_277,_279],
                         [_269,_271,_273]).
my_functor__1(_159,_161,_163) :-
        [other] = _165, [atom] = _167, [list,list,list] = _169,
        normalize_result([_165,_167,_169],
                          [_159,_161,_163]).
my_functor__1(_175,_177,_179) :-
        [list,_84] = _181, [atom] = _183, [list,list,list] = _185,
        normalize_result([_181,_183,_185],
                          [_175,_177,_179]).
my_functor__1(_149,_151,_153) :-
        [other] = _155, [atom] = _157, [list,list] = _159,
        normalize_result([_155,_157,_159],
                          [_149,_151,_153]).
my_functor__1(_149,_151,_153) :-
        [other] = _155, [atom] = _157, [list,list] = _159,
        normalize_result([_155,_157,_159],
                          [_149,_151,_153]).
my_arg__1(_145,_147,_149) :-
        [num] = _151, [other] = _153, [_129] = _155,
        normalize_result([_151,_153,_155],
                          [_145,_147,_149]).
my_arg__1(_161,_163,_165) :-
        [num] = _167, [list,_100] = _169, [_145] = _171,
        normalize_result([_167,_169,_171],
                          [_161,_163,_165]).
my_arg__1(_145,_147,_149) :-
        [num] = _151, [other] = _153, [_129] = _155,
        normalize_result([_151,_153,_155],
                          [_145,_147,_149]).
my_arg__1(_145,_147,_149) :-
        [num] = _151, [other] = _153, [_129] = _155,
        normalize_result([_151,_153,_155],
                          [_145,_147,_149]).
p_investigate__1(_122,_124) :-
        [list] = _126, [_109] = _128,
        normalize_result([_126,_128],
                          [_122,_124]).
p_investigate__1(_283,_285) :-
        [list,_256] = _287, [_260] = _289,
        p_match([_260],[_249]),
        p_investigate([_256],[_260]),
        normalize_result([_287,_289],
                         [_283,_285]).
p_match__1(_122,_124) :-
        [list] = _126, [_109] = _128,
        normalize_result([_126,_128],
                          [_122,_124]).
p_match__1(_270,_272) :-
        [list,_84] = _274, [_225] = _276,
        match([_225],[_229]),
        'my ='([atom],[atom]),
        normalize_result([_274,_276],
                         [_270,_272]).
p_match__1(_215,_217) :-
        [list,_191] = _219, [_195] = _221,
        p_match([_191],[_195]),
        normalize_result([_219,_221],
                         [_215,_217]).
match__1(_116,_118) :-
        [list] = _120, [list] = _122,
        normalize_result([_120,_122],
                          [_116,_118]).
match__1(_290,_292) :-
        [list,_263] = _294, [list,_267] = _296,
        'my ='([_245],[_254]),
        match([_263],[_267]),
        normalize_result([_294,_296],
                         [_290,_292]).
match__1(_369,_371) :-
        [_331] = _373, [list,_343] = _375,
        'my ='([_305],[other]),
        concat([_323],[_339],[_331]),
        match([_339],[_343]),
        normalize_result([_373,_375],
                         [_369,_371]).
match__1(_331,_333) :-
        [list,_301] = _335, [list,_305] = _337,
        my_atom([_283]),
        'my ='([_283],[_292]),
        match([_301],[_305]),
        normalize_result([_335,_337],
                         [_331,_333]).
match__1(_295,_297) :-
        [list,_268] = _299, [list,_272] = _301,
        match([_257],[_261]),
        match([_268],[_272]),
        normalize_result([_299,_301],
                         [_295,_297]).
my_atom__1(_93) :-
        [atom] = _95,
        normalize_result([_95],
                          [_93]).
my_atom__1(_93) :-
        [atom] = _95,
        normalize_result([_95],
                          [_93]).
concat__1(_149,_151,_153) :-
        [list] = _155, [_133] = _157, [_133] = _159,
        normalize_result([_155,_157,_159],
                          [_149,_151,_153]).
concat__1(_279,_281,_283) :-
        [list,_248] = _285, [_252] = _287, [list,_256] = _289,
        concat([_248],[_252],[_256]),
        normalize_result([_285,_287,_289],
                         [_279,_281,_283]).
length__1(_226,_228) :-
        [_197] = _230, [_205] = _232,
        length([_197],[num],[_205]),
        normalize_result([_230,_232],
                         [_226,_228]).
length__1(_149,_151,_153) :-
        [list] = _155, [_133] = _157, [_133] = _159,
        normalize_result([_155,_157,_159],
                          [_149,_151,_153]).
length__1(_362,_364,_366) :-
        [list,_328] = _368, [_313] = _370, [_336] = _372,
        'my is'([_332],[[_313],[num]]),
        length([_328],[_332],[_336]),
        normalize_result([_368,_370,_372],
                         [_362,_364,_366]).

%---------------- Definitions of tabled preds --------------

:- table length__1/3.
:- table length__1/2.
:- table concat__1/3.
:- table my_atom__1/1.
:- table match__1/2.
:- table p_match__1/2.
:- table p_investigate__1/2.
:- table my_arg__1/3.
:- table my_functor__1/3.
:- table property__1/3.
:- table get_pats__1/4.
:- table get_pats__1/3.
:- table investigate__1/2.
:- table split__1/4.
:- table randomize__1/3.
:- table fill__1/3.
:- table test__1/3.
:- table init__1/6.
:- table init__1/5.
:- table main__1/2.

length(_63,_65,_67) :-
        length__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
mylength(_63,_65) :-
        length__1(_67,_69),
        unify_sets([_63,_65], [_67,_69]).
concat(_63,_65,_67) :-
        concat__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
my_atom(_63) :-
        my_atom__1(_65),
        unify_sets([_63], [_65]).
match(_63,_65) :-
        match__1(_67,_69),
        unify_sets([_63,_65], [_67,_69]).
p_match(_63,_65) :-
        p_match__1(_67,_69),
        unify_sets([_63,_65], [_67,_69]).
p_investigate(_63,_65) :-
        p_investigate__1(_67,_69),
        unify_sets([_63,_65], [_67,_69]).
my_arg(_63,_65,_67) :-
        my_arg__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
my_functor(_63,_65,_67) :-
        my_functor__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
property(_63,_65,_67) :-
        property__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
get_pats(_63,_65,_67,_69) :-
        get_pats__1(_71,_73,_75,_77),
        unify_sets([_63,_65,_67,_69], [_71,_73,_75,_77]).
get_pats(_63,_65,_67) :-
        get_pats__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
investigate(_63,_65) :-
        investigate__1(_67,_69),
        unify_sets([_63,_65], [_67,_69]).
split(_63,_65,_67,_69) :-
        split__1(_71,_73,_75,_77),
        unify_sets([_63,_65,_67,_69], [_71,_73,_75,_77]).
randomize(_63,_65,_67) :-
        randomize__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
fill(_63,_65,_67) :-
        fill__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
test(_63,_65,_67) :-
        test__1(_69,_71,_73),
        unify_sets([_63,_65,_67], [_69,_71,_73]).
init(_63,_65,_67,_69,_71,_73) :-
        init__1(_75,_77,_79,_81,_83,_85),
        unify_sets([_63,_65,_67,_69,_71,_73], [_75,_77,_79,_81,_83,_85]).
init(_63,_65,_67,_69,_71) :-
        init__1(_73,_75,_77,_79,_81),
        unify_sets([_63,_65,_67,_69,_71], [_73,_75,_77,_79,_81]).
main(_63,_65) :-
        main__1(_67,_69),
        unify_sets([_63,_65], [_67,_69]).

%---------------- Tp ---------------------------------------

tp :- length__1(_64,_66,_68), fail.
tp :- length__1(_64,_66), fail.
tp :- concat__1(_64,_66,_68), fail.
tp :- my_atom__1(_64), fail.
tp :- match__1(_64,_66), fail.
tp :- p_match__1(_64,_66), fail.
tp :- p_investigate__1(_64,_66), fail.
tp :- my_arg__1(_64,_66,_68), fail.
tp :- my_functor__1(_64,_66,_68), fail.
tp :- property__1(_64,_66,_68), fail.
tp :- get_pats__1(_64,_66,_68,_70), fail.
tp :- get_pats__1(_64,_66,_68), fail.
tp :- investigate__1(_64,_66), fail.
tp :- split__1(_64,_66,_68,_70), fail.
tp :- randomize__1(_64,_66,_68), fail.
tp :- fill__1(_64,_66,_68), fail.
tp :- test__1(_64,_66,_68), fail.
tp :- init__1(_64,_66,_68,_70,_72,_74), fail.
tp :- init__1(_64,_66,_68,_70,_72), fail.
tp :- main__1(_64,_66), fail.
tp.


%---------------- Builtin Preds ----------------------------

'my ='(X1,X2) :- 'my =_1'(Y1,Y2), unify_sets([X1,X2],[Y1,Y2]).
'my \\=='(X1,X2) :- 'my \\==__1'(Y1,Y2), unify_sets([X1,X2],[Y1,Y2]).
'my is'(X1,X2) :- 'my is__1'(Y1,Y2), unify_sets([X1,X2],[Y1,Y2]).
'my <'([num],[num]).
'my >'([num],[num]).
'my >='([num],[num]).
'my =<'([num],[num]).
'my =:='([num],[num]).
'my =\\='([num],[num]).

'my =_1'(X,X).
'my \\==__1'(_,_).
'my is__1'(num,num).


%---------------- Show Result ------------------------------

show_facts :- length__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(length(_63,_65,_67)), nl, fail.
show_facts :- length__1(_63,_65),
              numbervars([_63,_65]),
              write(length(_63,_65)), nl, fail.
show_facts :- concat__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(concat(_63,_65,_67)), nl, fail.
show_facts :- my_atom__1(_63),
              numbervars([_63]),
              write(my_atom(_63)), nl, fail.
show_facts :- match__1(_63,_65),
              numbervars([_63,_65]),
              write(match(_63,_65)), nl, fail.
show_facts :- p_match__1(_63,_65),
              numbervars([_63,_65]),
              write(p_match(_63,_65)), nl, fail.
show_facts :- p_investigate__1(_63,_65),
              numbervars([_63,_65]),
              write(p_investigate(_63,_65)), nl, fail.
show_facts :- my_arg__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(my_arg(_63,_65,_67)), nl, fail.
show_facts :- my_functor__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(my_functor(_63,_65,_67)), nl, fail.
show_facts :- property__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(property(_63,_65,_67)), nl, fail.
show_facts :- get_pats__1(_63,_65,_67,_69),
              numbervars([_63,_65,_67,_69]),
              write(get_pats(_63,_65,_67,_69)), nl, fail.
show_facts :- get_pats__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(get_pats(_63,_65,_67)), nl, fail.
show_facts :- investigate__1(_63,_65),
              numbervars([_63,_65]),
              write(investigate(_63,_65)), nl, fail.
show_facts :- split__1(_63,_65,_67,_69),
              numbervars([_63,_65,_67,_69]),
              write(split(_63,_65,_67,_69)), nl, fail.
show_facts :- randomize__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(randomize(_63,_65,_67)), nl, fail.
show_facts :- fill__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(fill(_63,_65,_67)), nl, fail.
show_facts :- test__1(_63,_65,_67),
              numbervars([_63,_65,_67]),
              write(test(_63,_65,_67)), nl, fail.
show_facts :- init__1(_63,_65,_67,_69,_71,_73),
              numbervars([_63,_65,_67,_69,_71,_73]),
              write(init(_63,_65,_67,_69,_71,_73)), nl, fail.
show_facts :- init__1(_63,_65,_67,_69,_71),
              numbervars([_63,_65,_67,_69,_71]),
              write(init(_63,_65,_67,_69,_71)), nl, fail.
show_facts :- main__1(_63,_65),
              numbervars([_63,_65]),
              write(main(_63,_65)), nl, fail.
show_facts.
